package bank;


import java.util.ArrayList;

public class Kunde {
	
	/** 
	 * @uml.property name="kontenListe"
	 * @uml.associationEnd multiplicity="(0 -1)" ordering="true" aggregation="shared" inverse="kunde:bank.Konto"
	 */
	private ArrayList <Konto> kontenListe;
	/**
	 * @uml.property name="kundennummer"
	 */
	private int kundennummer;
	/**
	 * @uml.property name="Name"
	 */
	private String name = "";

	public Kunde() {
		kontenListe = new ArrayList<Konto>();
	}

	public Kunde(String name, int kundennummer) {
		this();
		setName(name);
		setKundennummer(kundennummer);
	}


	/**
	 * Getter of the property <tt>kundennummer</tt>
	 * 
	 * @return Returns the kundennummer.
	 * @uml.property name="kundennummer"
	 */
	public int getKundennummer() {
		return kundennummer;
	}

	/**
	 * Setter of the property <tt>kundennummer</tt>
	 * 
	 * @param kundennummer
	 *            The kundennummer to set.
	 * @uml.property name="kundennummer"
	 */
	public void setKundennummer(int kundennummer) {
		this.kundennummer = kundennummer;
	}

	
	/**
	 * Getter of the property <tt>Name</tt>
	 * 
	 * @return Returns the name.
	 * @uml.property name="Name"
	 */
	public String getName() {
		return name;
	}

	/**
	 * Setter of the property <tt>Name</tt>
	 * 
	 * @param Name
	 *            The name to set.
	 * @uml.property name="Name"
	 */
	public void setName(String name) {
		this.name = name;
	}

	public String anzeigenKontostandsUebersicht() {
		String out = "Kontostandsübersicht von Kontoinhaber " + name;
		for (Konto k : kontenListe) {
			out += "\nKontonummer: "+ k.getKontonummer() + "\tKontostand: " + k.getKontostand() + "\nKontobewegungen";
			for (Kontobewegung b : k.getMeineKontobewegungen()) {
				out += "\n\t" + b.getDatum() + ", " + b.getBetrag();
			}
		}
		return out;
	}

	public Konto anlegenKonto(int kontoArt) { // TODO Kontoart sollte ein ENUM werden!
		int kontoNummer = (getKundennummer() * 100 + kontoArt) * 1000 + kontenListe.size() + 1;
		Konto konto = Konto.neuesKonto(kontoNummer, kontoArt);
		kontenListe.add(konto);
		return konto;
	}

	
	/**
	 * Getter of the property <tt>kontenListe</tt>
	 * @return  Returns the kontenListe.
	 * @uml.property  name="kontenListe"
	 */
	public ArrayList<Konto> getKontenListe() {
		return kontenListe;
	}

	/**
	 * Setter of the property <tt>kontenListe</tt>
	 * @param kontenListe  The konto to set.
	 * @uml.property  name="kontenListe"
	 */
	public void setKontenListe(ArrayList<Konto> kontenListe) {
		this.kontenListe = kontenListe;
	}

	public double getKontostand(int kontonummer) {
		return getKonto(kontonummer).getKontostand();
	}

	public double auszahlenBetrag(int kontonummer, double betrag) throws Exception { 
		try {
			this.getKonto(kontonummer).auszahlen(betrag);
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}
		return this.getKonto(kontonummer).getKontostand();
	}

	public double einzahlenBetrag(int kontonummer, double betrag) {
		try{
			this.getKonto(kontonummer).einzahlen(betrag);
		}catch(Exception c){
		}
		return this.getKonto(kontonummer).getKontostand();
	}

	public void hinzufuegenKonto(Konto konto) {
		
	}

	public Konto getKonto(int vonKontoNr) {
		for(Konto konto : kontenListe){
			if(konto.getKontonummer() == vonKontoNr){
				return konto;
			}			
		}
		return null;
	}

}
